package com.cs.beneficios.web.action;
import com.cs.beneficios.business.entity.AuditoriaDAO;
import com.cs.beneficios.business.entity.ProgramaDAO;
import com.cs.beneficios.business.entity.SubProgramaDAO;
import com.cs.beneficios.business.model.ProgramaVO;
import com.cs.beneficios.business.model.SubProgramaVO;
import com.cs.beneficios.common.ConnectionFactory;
import com.cs.paoyer.administration.business.model.UserVO;
import com.cs.paoyer.administration.exception.AdministrationUserException;
import com.cs.paoyer.administration.util.AccessControl;
import com.cs.paoyer.common.exception.CommonUserException;
import com.cs.paoyer.common.exception.UserException;

import java.io.IOException;

import java.sql.SQLException;

import java.util.Collection;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionMessage;
import org.apache.struts.action.ActionMessages;

public class CASelectCriteriaMainAction extends Action 
{
  /**
   * This is the main action called from the Struts framework.
   * @param mapping The ActionMapping used to select this instance.
   * @param form The optional ActionForm bean for this request.
   * @param request The HTTP Request we are processing.
   * @param response The HTTP Response we are processing.
   * @return 
   * @throws java.io.IOException
   * @throws javax.servlet.ServletException
   */
  public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException
  {
    ActionMessages messages = new ActionMessages();
    try
    {
      try{
        AccessControl access = new AccessControl();
        access.validateAccess(mapping,request,response);
        
        //ConnectionFactory cf = new ConnectionFactory("beneficios","beneficios");
		ConnectionFactory cf = new ConnectionFactory();
        HttpSession session = request.getSession();
        UserVO user = (UserVO) request.getSession().getAttribute("userInfo");
        
        Collection cSecretaria=null;
        Collection cProgramas=null;
        Collection cSubProgramas=null;
        Long lCodeSecretaria = new Long(0);
        
        
        String strCodePrograma = (String)request.getParameter("codePrograma");
        String strCodeSubPrograma = (String)request.getParameter("codesubprograma");
        String strCodeSecretaria = (String)request.getParameter("codearea");
        String strOption = (String)request.getParameter("option");
        String strUser = (String)request.getParameter("administrador");
        
               
        if(strOption == null)
        {
          session.removeAttribute("codeSec");
          if(user.getUserGroupName().equals("ADMINISTRADOR SECRETARIA"))
          {
            lCodeSecretaria = user.getCodeArea();
            strCodeSecretaria = user.getCodeArea()+"";
          }
        }
         
        if(strCodeSecretaria != null && !strCodeSecretaria.equals(""))
        {
          lCodeSecretaria = new Long(strCodeSecretaria);
        }else
        {
          if(user.getUserGroupName().equals("ADMINISTRADOR SECRETARIA"))
          {
            lCodeSecretaria = user.getCodeArea();
          }
        }
        
        AuditoriaDAO objAuditoria = new AuditoriaDAO(cf);
        int iCode = Integer.parseInt(String.valueOf(user.getCode()));
        cSecretaria = objAuditoria.SelectSecretaria(iCode, user.getUserGroupName());
        cf.closeConnection(objAuditoria.getConn());
        
        ProgramaVO objProgramVO= new ProgramaVO();
        objProgramVO.setCodePrograma(strCodePrograma);
        objProgramVO.setCodeArea(user.getCodeArea());
        
        ProgramaDAO objPrograma = new ProgramaDAO(cf);
        cProgramas = objPrograma.getProgramasVigentes(objProgramVO,user.getUserGroupName(),user.getCode(),lCodeSecretaria, true);
        cf.closeConnection(objPrograma.getConn());
        
        SubProgramaVO objSubProgVO = new SubProgramaVO();
        if (strCodeSubPrograma != null)
          objSubProgVO.setCode(new Long(strCodeSubPrograma));
        
        if (strCodePrograma != null && !strCodePrograma.equals(""))
          objSubProgVO.setCodePrograma(new Long(strCodePrograma));
          
        objSubProgVO.setCodeArea(user.getCodeArea());
        
        SubProgramaDAO objSubprograma = new SubProgramaDAO(cf);
        cSubProgramas = objSubprograma.getSubprogVigentes(objSubProgVO,user.getCode(),user.getUserGroupName(),lCodeSecretaria);
        cf.closeConnection(objSubprograma.getConn());
        
        if(strCodeSecretaria != null)
          session.setAttribute("codeSec",strCodeSecretaria);
          
        if(strCodePrograma != null)
          request.setAttribute("codeProg",strCodePrograma);
          
        if(strUser != null)
          request.setAttribute("nameUser",strUser);
          
        request.setAttribute("cSecretaria",cSecretaria);
        request.setAttribute("cProgramas",cProgramas);
        request.setAttribute("cSubProgramas",cSubProgramas);
        
          
      }catch (SQLException sqle)
      {
		System.err.println("/******** TDSUB - cwsub");
		sqle.printStackTrace();
		System.err.println("TDSUB - cwsub ********/");
      }
    }catch (UserException ue) 
    {
       messages.add("msgWarn",  new ActionMessage("loginForm.message."
                                          + ue.getExceptionVO().getId()));
       saveMessages(request, messages);
      if(ue.getExceptionVO().getId()==AdministrationUserException.ENDED_SESSION)
      {       
            response.sendRedirect(request.getContextPath()+"/index.jsp");
      }
      else if(ue.getExceptionVO().getId()==CommonUserException.NOT_ALLOWED_RESOURCE)
      {
          response.sendRedirect(request.getContextPath()+"/admin/tile/invalidatedResource.jsp");
      }
      else
      {
          return mapping.getInputForward();
      }
    }
    return mapping.findForward("success");
  }
}